home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / acpi / amlresrc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  9.7 KB  |  312 lines

  1.  
  2. /******************************************************************************
  3.  *
  4.  * Module Name: amlresrc.h - AML resource descriptors
  5.  *
  6.  *****************************************************************************/
  7.  
  8. /*
  9.  * Copyright (C) 2000 - 2008, Intel Corp.
  10.  * All rights reserved.
  11.  *
  12.  * Redistribution and use in source and binary forms, with or without
  13.  * modification, are permitted provided that the following conditions
  14.  * are met:
  15.  * 1. Redistributions of source code must retain the above copyright
  16.  *    notice, this list of conditions, and the following disclaimer,
  17.  *    without modification.
  18.  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  19.  *    substantially similar to the "NO WARRANTY" disclaimer below
  20.  *    ("Disclaimer") and any redistribution must be conditioned upon
  21.  *    including a substantially similar Disclaimer requirement for further
  22.  *    binary redistribution.
  23.  * 3. Neither the names of the above-listed copyright holders nor the names
  24.  *    of any contributors may be used to endorse or promote products derived
  25.  *    from this software without specific prior written permission.
  26.  *
  27.  * Alternatively, this software may be distributed under the terms of the
  28.  * GNU General Public License ("GPL") version 2 as published by the Free
  29.  * Software Foundation.
  30.  *
  31.  * NO WARRANTY
  32.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  33.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  34.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  35.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  36.  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  37.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  38.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  39.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  40.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  41.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  42.  * POSSIBILITY OF SUCH DAMAGES.
  43.  */
  44.  
  45. /* acpisrc:struct_defs -- for acpisrc conversion */
  46.  
  47. #ifndef __AMLRESRC_H
  48. #define __AMLRESRC_H
  49.  
  50. /*
  51.  * Resource descriptor tags, as defined in the ACPI specification.
  52.  * Used to symbolically reference fields within a descriptor.
  53.  */
  54. #define ACPI_RESTAG_ADDRESS                     "_ADR"
  55. #define ACPI_RESTAG_ALIGNMENT                   "_ALN"
  56. #define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
  57. #define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
  58. #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
  59. #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
  60. #define ACPI_RESTAG_BUSMASTER                   "_BM_"    /* Master(1), Slave(0) */
  61. #define ACPI_RESTAG_DECODE                      "_DEC"
  62. #define ACPI_RESTAG_DMA                         "_DMA"
  63. #define ACPI_RESTAG_DMATYPE                     "_TYP"    /* Compatible(0), A(1), B(2), F(3) */
  64. #define ACPI_RESTAG_GRANULARITY                 "_GRA"
  65. #define ACPI_RESTAG_INTERRUPT                   "_INT"
  66. #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"    /* active_lo(1), active_hi(0) */
  67. #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"    /* Shareable(1), no_share(0) */
  68. #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"    /* Edge(1), Level(0) */
  69. #define ACPI_RESTAG_LENGTH                      "_LEN"
  70. #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"    /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
  71. #define ACPI_RESTAG_MEMTYPE                     "_MEM"    /* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
  72. #define ACPI_RESTAG_MAXADDR                     "_MAX"
  73. #define ACPI_RESTAG_MINADDR                     "_MIN"
  74. #define ACPI_RESTAG_MAXTYPE                     "_MAF"
  75. #define ACPI_RESTAG_MINTYPE                     "_MIF"
  76. #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
  77. #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
  78. #define ACPI_RESTAG_RANGETYPE                   "_RNG"
  79. #define ACPI_RESTAG_READWRITETYPE               "_RW_"    /* read_only(0), Writeable (1) */
  80. #define ACPI_RESTAG_TRANSLATION                 "_TRA"
  81. #define ACPI_RESTAG_TRANSTYPE                   "_TRS"    /* Sparse(1), Dense(0) */
  82. #define ACPI_RESTAG_TYPE                        "_TTP"    /* Translation(1), Static (0) */
  83. #define ACPI_RESTAG_XFERTYPE                    "_SIZ"    /* 8(0), 8_and16(1), 16(2) */
  84.  
  85. /* Default sizes for "small" resource descriptors */
  86.  
  87. #define ASL_RDESC_IRQ_SIZE                      0x02
  88. #define ASL_RDESC_DMA_SIZE                      0x02
  89. #define ASL_RDESC_ST_DEPEND_SIZE                0x00
  90. #define ASL_RDESC_END_DEPEND_SIZE               0x00
  91. #define ASL_RDESC_IO_SIZE                       0x07
  92. #define ASL_RDESC_FIXED_IO_SIZE                 0x03
  93. #define ASL_RDESC_END_TAG_SIZE                  0x01
  94.  
  95. struct asl_resource_node {
  96.     u32 buffer_length;
  97.     void *buffer;
  98.     struct asl_resource_node *next;
  99. };
  100.  
  101. /* Macros used to generate AML resource length fields */
  102.  
  103. #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
  104. #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
  105.  
  106. /*
  107.  * Resource descriptors defined in the ACPI specification.
  108.  *
  109.  * Packing/alignment must be BYTE because these descriptors
  110.  * are used to overlay the raw AML byte stream.
  111.  */
  112. #pragma pack(1)
  113.  
  114. /*
  115.  * SMALL descriptors
  116.  */
  117. #define AML_RESOURCE_SMALL_HEADER_COMMON \
  118.     u8                              descriptor_type;
  119.  
  120. struct aml_resource_small_header {
  121. AML_RESOURCE_SMALL_HEADER_COMMON};
  122.  
  123. struct aml_resource_irq {
  124.     AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
  125.     u8 flags;
  126. };
  127.  
  128. struct aml_resource_irq_noflags {
  129.     AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
  130. };
  131.  
  132. struct aml_resource_dma {
  133.     AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
  134.     u8 flags;
  135. };
  136.  
  137. struct aml_resource_start_dependent {
  138.     AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
  139. };
  140.  
  141. struct aml_resource_start_dependent_noprio {
  142. AML_RESOURCE_SMALL_HEADER_COMMON};
  143.  
  144. struct aml_resource_end_dependent {
  145. AML_RESOURCE_SMALL_HEADER_COMMON};
  146.  
  147. struct aml_resource_io {
  148.     AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
  149.     u16 minimum;
  150.     u16 maximum;
  151.     u8 alignment;
  152.     u8 address_length;
  153. };
  154.  
  155. struct aml_resource_fixed_io {
  156.     AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
  157.     u8 address_length;
  158. };
  159.  
  160. struct aml_resource_vendor_small {
  161. AML_RESOURCE_SMALL_HEADER_COMMON};
  162.  
  163. struct aml_resource_end_tag {
  164.     AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
  165. };
  166.  
  167. /*
  168.  * LARGE descriptors
  169.  */
  170. #define AML_RESOURCE_LARGE_HEADER_COMMON \
  171.     u8                              descriptor_type;\
  172.     u16                             resource_length;
  173.  
  174. struct aml_resource_large_header {
  175. AML_RESOURCE_LARGE_HEADER_COMMON};
  176.  
  177. struct aml_resource_memory24 {
  178.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  179.     u16 minimum;
  180.     u16 maximum;
  181.     u16 alignment;
  182.     u16 address_length;
  183. };
  184.  
  185. struct aml_resource_vendor_large {
  186. AML_RESOURCE_LARGE_HEADER_COMMON};
  187.  
  188. struct aml_resource_memory32 {
  189.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  190.     u32 minimum;
  191.     u32 maximum;
  192.     u32 alignment;
  193.     u32 address_length;
  194. };
  195.  
  196. struct aml_resource_fixed_memory32 {
  197.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  198.     u32 address;
  199.     u32 address_length;
  200. };
  201.  
  202. #define AML_RESOURCE_ADDRESS_COMMON \
  203.     u8                              resource_type; \
  204.     u8                              flags; \
  205.     u8                              specific_flags;
  206.  
  207. struct aml_resource_address {
  208. AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
  209.  
  210. struct aml_resource_extended_address64 {
  211.     AML_RESOURCE_LARGE_HEADER_COMMON
  212.         AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
  213.     u8 reserved;
  214.     u64 granularity;
  215.     u64 minimum;
  216.     u64 maximum;
  217.     u64 translation_offset;
  218.     u64 address_length;
  219.     u64 type_specific;
  220. };
  221.  
  222. #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1    /* ACPI 3.0 */
  223.  
  224. struct aml_resource_address64 {
  225.     AML_RESOURCE_LARGE_HEADER_COMMON
  226.         AML_RESOURCE_ADDRESS_COMMON u64 granularity;
  227.     u64 minimum;
  228.     u64 maximum;
  229.     u64 translation_offset;
  230.     u64 address_length;
  231. };
  232.  
  233. struct aml_resource_address32 {
  234.     AML_RESOURCE_LARGE_HEADER_COMMON
  235.         AML_RESOURCE_ADDRESS_COMMON u32 granularity;
  236.     u32 minimum;
  237.     u32 maximum;
  238.     u32 translation_offset;
  239.     u32 address_length;
  240. };
  241.  
  242. struct aml_resource_address16 {
  243.     AML_RESOURCE_LARGE_HEADER_COMMON
  244.         AML_RESOURCE_ADDRESS_COMMON u16 granularity;
  245.     u16 minimum;
  246.     u16 maximum;
  247.     u16 translation_offset;
  248.     u16 address_length;
  249. };
  250.  
  251. struct aml_resource_extended_irq {
  252.     AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
  253.     u8 interrupt_count;
  254.     u32 interrupts[1];
  255.     /* res_source_index, res_source optional fields follow */
  256. };
  257.  
  258. struct aml_resource_generic_register {
  259.     AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
  260.     u8 bit_width;
  261.     u8 bit_offset;
  262.     u8 access_size;        /* ACPI 3.0, was previously Reserved */
  263.     u64 address;
  264. };
  265.  
  266. /* restore default alignment */
  267.  
  268. #pragma pack()
  269.  
  270. /* Union of all resource descriptors, so we can allocate the worst case */
  271.  
  272. union aml_resource {
  273.     /* Descriptor headers */
  274.  
  275.     u8 descriptor_type;
  276.     struct aml_resource_small_header small_header;
  277.     struct aml_resource_large_header large_header;
  278.  
  279.     /* Small resource descriptors */
  280.  
  281.     struct aml_resource_irq irq;
  282.     struct aml_resource_dma dma;
  283.     struct aml_resource_start_dependent start_dpf;
  284.     struct aml_resource_end_dependent end_dpf;
  285.     struct aml_resource_io io;
  286.     struct aml_resource_fixed_io fixed_io;
  287.     struct aml_resource_vendor_small vendor_small;
  288.     struct aml_resource_end_tag end_tag;
  289.  
  290.     /* Large resource descriptors */
  291.  
  292.     struct aml_resource_memory24 memory24;
  293.     struct aml_resource_generic_register generic_reg;
  294.     struct aml_resource_vendor_large vendor_large;
  295.     struct aml_resource_memory32 memory32;
  296.     struct aml_resource_fixed_memory32 fixed_memory32;
  297.     struct aml_resource_address16 address16;
  298.     struct aml_resource_address32 address32;
  299.     struct aml_resource_address64 address64;
  300.     struct aml_resource_extended_address64 ext_address64;
  301.     struct aml_resource_extended_irq extended_irq;
  302.  
  303.     /* Utility overlays */
  304.  
  305.     struct aml_resource_address address;
  306.     u32 dword_item;
  307.     u16 word_item;
  308.     u8 byte_item;
  309. };
  310.  
  311. #endif
  312.